<?php

namespace App\Http\Controllers\admin\Rbac;

use App\Http\Controllers\Controller;
use App\Models\NodeModel;
use App\Models\Role;
use App\Models\RoleModel;
use App\Models\RoleNode;
use App\Models\RoleNoleModel;
use App\Service\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class RoleController
{
    /**
     * @后台角色展示页面
     * @user 刘璇
     * @method get
     * @url https://www.healthcare.com/user/user_index
     * @data
     * @return \Illuminate\Http\Response
     */
    public function roleIndex()
    {
        //通过ORM模型查询数据
        $data = RoleNoleModel::with(['role','node'])->paginate(5);
        return view('Rbac/roleindex',['data'=>$data]);
    }

    /**
     * @后台角色添加页面
     * 管理员可以选择要分配给角色的权限，进而创建新的角色。
     * @user 刘璇
     * @method get
     * @url https://www.healthcare.com/user/user_create
     * @data
     * @return \Illuminate\Http\Response
     */
    public function roleCreate()
    {
        //通过ORM模型获取数据转为数组
        $node=NodeModel::get()->toArray();
        //调用 Auth 类的 getTreeList() 方法
        $data=Auth::getTreeList($node);
        return view('Rbac/rolecreate',['data'=>$data]);
    }

    /**
     * @后台角色添加方法
     * @user 刘璇
     * @method post
     * @url https://www.healthcare.com/user/user_add
     * @data
     * @return \Illuminate\Http\Response
     */
    public function roleAdd(Request $request)
    {
        $data=$request->except('_token');
        DB::beginTransaction();
        try {
            //角色添加
            $list=RoleModel::create([
                'role_name'=>$data['role_name']
            ]);
            //根据新插入角色的 ID 查找并获取刚刚添加的角色实例 $role
            $role=RoleModel::where('id',$list['id'])->first();
            $auth=[];
            //循环/遍历 $data['auth_ids'] 数组中的元素
            foreach ($data['auth_ids'] as $k=>$v)
            {
                //设置权限数组 $auth 中的 role_id 字段为当前角色的 ID
                $auth[$k]['role_id']=$role['id'];
                //当前权限节点的 ID
                $auth[$k]['node_id']=$v;
            }
            //角色分配权限
            RoleNoleModel::insert($auth);
            DB::commit();
            return redirect('user/role_index');
        }catch (\Exception $exception){
            DB::rollBack();
            Log::info($exception->getMessage());
        }
    }

    /**
     * @后台角色删除方法
     * @user 刘璇
     * @method get
     * @url https://www.healthcare.com/user/role_delete/{id}
     * @data
     * @return \Illuminate\Http\Response
     */
    public function roleDelete($id){
        // //检查一个变量是否为数字
        if(is_numeric($id)){
            response()->json(['code'=>100010,'message'=>'数据参数不正确']);
        }
        //通过ORM模型进行删除
        $data=RoleNoleModel::destroy($id);
        if($data){
            return redirect("user/role_index");
        }else{
            response()->json(['code'=>100010,'message'=>'角色删除失败']);
        }
    }


}
